// 使用Node.js的http模块和fs模块，创建一个文件搜索服务。用户可以通过访问/search?query=关键词来搜索指定目录下的文件名是否包含关键词的文件。

// 服务器监听在本地的8000端口。
// 搜索的目录为当前目录下的files文件夹。
// 返回一个JSON格式的响应，包含所有匹配的文件名。如果未找到匹配的文件，返回一个空数组。

// 导入模块
import fs from "fs";
import http from "http";
import Path from "path";

// 创建函数
function fn(req, res) {
  // 搜索的目录路径
  const path = "./files/";

  // 当前请求的 路径
  const url = req.url;

  // 获取文件名称
  const fileName = url.split("=")[1];

  // 创建数组
  const arr = [];

  // 判断是否有输入的文件名称
  if (fileName === "") {
    // 没有输入关键字
    console.log("请先输入关键字");
    // 直接退出函数
    return;
  } else {
    // 先列出目录下的所有文件
    fs.readdir(path, (err, files) => {
      if (err) {
        console.log(err);
      } else {
        // 查询目录下是否有关键字的文件
        files.forEach((element) => {
          // 判断是否有关键字
          if (element.includes(fileName)) {
            // 把这个文件添加到新数组中
            arr.push(element);
          }
        });

        // 创建查询结果对象
        const queryResult = { files: arr };

        // 把对象转换成 JSON 格式
        const queryResultJson = JSON.stringify(queryResult);

        // 返回的内容的 JSON（数组不为空时code:200，为空时code:500）
        res.writeHead(arr.length ? 200 : 500, {
          "Content-Type": " application/json;charset=utf8",
        });

        // 把 JSON 响应给浏览器
        res.end(queryResultJson);
      }
    });
  }
}

// 服务器初始化
const server = http.createServer(fn);

// 监听本地端口
server.listen(8000);
